
//创建用户集合
//引入mongoose第三方模块
const mongoose = require('mongoose');
//Joi更新后的写法
const Joi = require('joi');

//创建集合规则
const userSchema = new mongoose.Schema({
    username: {
        type: String,
        required: true,
        minlength: 2,
        maxlength: 20
    },
    email: {
        type: String,
        //保证邮箱在插入数据库时不重复
        unique: true,
        required: true
    },
    password: {
        type: String,
        require: true
    },
    //规定admin 为超级管理员；normal为普通用户
    role: {
        type: String,
        required: true
    },
    //0 启用状态
    //1 禁用状态
    state: {
        type: Number,
        default: 0
    }
})

//创建集合
const User = mongoose.model('User', userSchema);

// //初始化对象，测试代码
// User.create({
//     username: 'cyg',
//     email: 'cyg@cyg.cn',
//     password: '123456',
//     role: 'admin',
//     state: 0
// }).then(() => {
//     console.log('用户创建成功')
// }).catch(() => {
//     console.log('用户创建失败')
// })


//验证用户信息
const validateUser = user => {
    //定义对象验证规则
    const schema = Joi.object({
        username :Joi.string().min(3).max(12).required().error(new Error('用户名没有通过验证')),
        email :Joi.string().email().required().error(new Error('邮箱地址没有通过验证')),
        password :Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/).required().error(new Error('密码没有通过验证')),
        role :Joi.string().valid('normal','admin').required().error(new Error('角色没有通过验证')),
        state :Joi.number().valid(0,1).required().error(new Error('状态没有通过验证')),
    });

    //实施验证  新版Joi更改了书写方法
    return schema.validateAsync(user);
}

//将用户集合作为模块进行导出
module.exports = {
    //es6中属性与属性值一致时，可省略
    User,
    validateUser
}